FB: sprava uzivatelov v Delphi
Otázka od: Fedor 'fi0dor' Tirsel
29. 4. 2004 2:23
Zdravim,
mam nasledujuci problem. V aplikacii si spravujem uzivatelov databazy (Firebird
1.5, WinXP, IBX); mam tri rozne skupiny uzivatelov (uzivatel, administrator,
vysetrovatel) -- tieto skupiny maju pridelene pravomoci pomocou zaradenia do
urcitej role (UZIVATEL, ADMINISTRATOR, VYSETROVATEL). Vsetko funguje tak ako
ma,
akurat ked chcem napr. novo-vytvorenemu uzivatelovi priradit rolu UZIVATEL,
poslem na server dotaz tvaru GRANT UZIVATEL TO LOGIN_UZIVATELA. Z nejakeho, mne
neznameho dovodu, sa tento dotaz ale neprevedie resp. sa prevedie, ale nema
ziaden ucinok -- novo-vytvoreny uzivatel nie je vlastnikom role UZIVATEL. Ked
vsak rovnaky dotaz GRANT UZIVATEL TO LOGIN_UZIVATELA prevediem napr. v IB
Expert, tak sa dotaz prevedie spravne a uzivatel je clenom zadanej role.
Podotykam, ze v mojej aplikacii sa prihlasujem uzivatelom, ktory ma plne prava
(WITH ADMIN OPTIONS a pod.) -- tie iste prihlasovacie parametre mam aj v IB
Expert. Neviete v com by mohol byt "zakopany pes" -- preco to z Delphi
nefunguje
a z IB Expert ide?
Kod, ktorym pridavam noveho uzivatela a pridelujem rolu:
try
with sprava_uzivatelov.ib_users do
begin
Active := true;
SecurityAction := ActionAddUser;
//prekonvertujem diakritiku
UserName := slovakToAscii( priezvisko.Text + '_' + meno.Text );
Password := slovakToAscii( self.heslo.Text );
FirstName := slovakToAscii( self.meno.Text );
LastName := slovakToAscii( self.priezvisko.Text );
//pridam uzivatela
AddUser;
Active := false;
end;
finally
//opravim diakritiku a pridelim prava novemu uzivatelovi
sprava_uzivatelov.transaction.CommitRetaining; //potvrdim transakciu
sprava_uzivatelov.doQuery( sprava_uzivatelov.query_security_db,
'UPDATE users
SET first_name = ''' + self.meno.Text + ''', last_name = ''' +
self.priezvisko.Text + ''' WHERE user_name = ''' + UpperCase(
sprava_uzivatelov.ib_users.UserName ) + '''');
if role = 'ADMINISTRATOR'
then admin := ' WITH ADMIN OPTION'
else admin := '';
sprava_uzivatelov.doQuery( sprava_uzivatelov.query_security_db, 'GRANT ' +
role + ' TO ' + UpperCase( sprava_uzivatelov.ib_users.UserName ) + admin );
sprava_uzivatelov.doQuery( sprava_uzivatelov.query_database, 'GRANT ' + role
+
' TO ' + UpperCase( sprava_uzivatelov.ib_users.UserName ) + admin );
sprava_uzivatelov.transaction.Commit; //potvrdim transakciu
end;
S pozdravom...
--
Fedor 'fi0dor' Tirsel
www.fi0dor.info